package com.qf.service.impl;

import com.qf.constant.CartConstant;
import com.qf.dto.CartItem;
import com.qf.dto.ResultBean;
import com.qf.dto.TProductCartDTO;
import com.qf.entity.TProduct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author NingZhongYi
 * @Date 2020-03-11
 */
@Service
public class ICartServiceImpl {

    @Autowired
    private RedisTemplate redisTemplate;


    // 查看购物车
    public ResultBean showCart(String uuid){
        if (uuid!=null&&!"".equals(uuid)){
            String redisKey=CartConstant.REDIS_CART_PRE+uuid;
            Object o = redisTemplate.opsForValue().get(redisKey);
            if (o!=null){
                List<CartItem> carts= (List<CartItem>) o;
                List<TProductCartDTO> products=new ArrayList<>();
                for (CartItem cartItem : carts) {
                    // 拿到每一个存在Redis中购物车里的商品 的id，数量，更新时间
                    // 通过id 去Redis 中获取到该商品的具体的信息，赋值给 需要展示在购物车上的dto 中    // product:10
                    String productKey=CartConstant.REDIS_PRODUCT_PRE+cartItem.getProdutId().toString();
                    TProduct pro = (TProduct) redisTemplate.opsForValue().get(productKey);
                    if (pro==null){
                        // 去数据库中查询到该商品的信息，再存到Redis中

                    }
                }
            }
            return ResultBean.error("购物车里没有东西");
        }
        return ResultBean.error("当前用户没有购物车");
    }


    // 添加商品到购物车
    public ResultBean addProductToCart(String uuid,Long productId, Integer count) {
        // 先组织Redis 中购物车的key键
        String redisKey=new StringBuilder().append(uuid).toString();

        // 去Redis中取出购物车
        Object o = redisTemplate.opsForValue().get(redisKey);

        // 1 第一种情况，没有购物车
        // 一个购物车 里存放的是 一个 集合,各种商品 的集合
        if (o==null){
            // 当前用户没有购物车
            CartItem cartItem=new CartItem(productId,count,new Date());

            // 创建一个购物车  添加到Redis中
            List<CartItem> carts=new ArrayList<>();
            carts.add(cartItem);

            redisTemplate.opsForValue().set(redisKey,carts);
            return ResultBean.success(carts,"添加购物车成功");

        }
        // 2 有购物车 ，就要判断 该商品是否存在了
        List<CartItem> carts= (List<CartItem>) o;
        for (CartItem cartItem : carts) {
            if (cartItem.getProdutId().longValue()==productId.longValue()){// 这里是否需要转换成long类型,必须转换成long类型，否则无法匹配
                // 有购物车 ，且商品存在
                cartItem.setCount(cartItem.getCount()+count);
                cartItem.setUpdateDate(new Date());
                redisTemplate.opsForValue().set(redisKey,carts);
                return ResultBean.success(carts,"添加购物车成功");
            }
        }
        // 有购物车，但是购物车里无该商品
        CartItem cartItem=new CartItem(productId,count,new Date());
        carts.add(cartItem);
        redisTemplate.opsForValue().set(redisKey,carts);
        return ResultBean.success(carts,"添加购物车成功");

    }




    public ResultBean cleanCart(String uuid) {
        //组织Redis中的购物车的键
        String redisKey= CartConstant.REDIS_CART_PRE+uuid;
        redisTemplate.delete(redisKey);// 通过键删除Redis

        return ResultBean.success(redisKey,"清除购物车成功");

    }
}
